Controllers লারাভেলের একটি গুরুত্বপূর্ণ অংশ, যা অ্যাপ্লিকেশন লজিক এবং HTTP রিকোয়েস্ট পরিচালনা করে। Controllers-এর মাধ্যমে রাউটের সাথে যুক্ত লজিক আলাদা করা যায়, যা কোডকে পরিষ্কার এবং সংগঠিত করে। নিচে Controllers-এর বিভিন্ন দিক নিয়ে আলোচনা করা হলো।
Controllers HTTP রিকোয়েস্টের জন্য লজিক পরিচালনা করে। এগুলি বিভিন্ন মেথডে বিভক্ত থাকে, প্রতিটি মেথড সাধারণত একটি নির্দিষ্ট রাউটের জন্য ব্যবহৃত হয়। Controllers ব্যবহার করে কোডের পুনঃব্যবহার এবং রক্ষণাবেক্ষণ সহজ হয়।
নতুন কন্ট্রোলার তৈরি করতে আপনি php artisan make:controller ControllerName
কমান্ড ব্যবহার করতে পারেন।
php artisan make:controller UserController
এটি app/Http/Controllers
ডিরেক্টরিতে একটি নতুন UserController.php
ফাইল তৈরি করবে।
মৌলিক কন্ট্রোলার হলো সিম্পল ক্লাস যা HTTP রিকোয়েস্ট পরিচালনা করে। এগুলোর মধ্যে একাধিক মেথড থাকতে পারে।
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index()
{
return view('users.index');
}
public function show($id)
{
return view('users.show', ['user' => User::find($id)]);
}
}
একক অ্যাকশন কন্ট্রোলার শুধুমাত্র একটি মেথড ধারণ করে। এগুলো ছোট এবং বিশেষায়িত রাউটগুলোর জন্য উপযুক্ত।
php artisan make:controller ShowProfileController --invokable
এটি __invoke()
মেথড যুক্ত করে একটি কন্ট্রোলার তৈরি করবে।
Controllers-এর জন্য মিডলওয়্যার নির্দিষ্ট করা যায়, যা কন্ট্রোলারের মেথডগুলোর আগে বা পরে কাজ করে। এটি নিরাপত্তা এবং অথেনটিকেশনের জন্য ব্যবহৃত হয়।
public function __construct()
{
$this->middleware('auth');
}
এটি সমস্ত মেথডের জন্য অথেনটিকেশন মিডলওয়্যার প্রয়োগ করবে।
রিসোর্স কন্ট্রোলার HTTP রিকোয়েস্টের জন্য CRUD অপারেশন (Create, Read, Update, Delete) পরিচালনা করে। এটি ডিফল্টভাবে একটি সম্পূর্ণ RESTful কন্ট্রোলার তৈরি করে।
php artisan make:controller PhotoController --resource
এটি একটি রিসোর্স কন্ট্রোলার তৈরি করবে যা সমস্ত মৌলিক CRUD মেথড ধারণ করবে।
কিছু সময় আপনাকে রিসোর্স কন্ট্রোলারের কিছু মেথড বাদ দিতে হতে পারে। এটি করার জন্য, আপনি only
বা except
প্যারামিটার ব্যবহার করতে পারেন।
Route::resource('photos', PhotoController::class)->only(['index', 'show']);
এটি শুধুমাত্র index
এবং show
মেথডের জন্য রাউট তৈরি করবে।
নেস্টেড রিসোর্স ব্যবহার করে আপনি একটি রিসোর্সের সাথে সম্পর্কিত অন্য একটি রিসোর্স তৈরি করতে পারেন।
Route::resource('users.photos', PhotoController::class);
এটি ইউজার এবং ফটো রিসোর্সের মধ্যে সম্পর্ক তৈরি করবে।
রিসোর্স রাউট তৈরি করার সময়, আপনি স্বয়ংক্রিয়ভাবে নামকরণ করতে পারেন। এই নামগুলি রাউটগুলোর উপর ভিত্তি করে URL তৈরি করতে সাহায্য করে।
Route::resource('photos', PhotoController::class);
এটি photos.index
, photos.show
, ইত্যাদি নাম তৈরি করবে।
আপনি রাউট প্যারামিটারগুলোর নামও কাস্টমাইজ করতে পারেন।
Route::resource('photos', PhotoController::class)->parameters([
'photos' => 'image',
]);
এটি image
প্যারামিটার ব্যবহার করবে।
স্কোপিং রিসোর্স রাউট তৈরি করতে, আপনি রিসোর্সের সাথে নির্দিষ্ট কন্ডিশন যুক্ত করতে পারেন।
Route::resource('users.photos', PhotoController::class)->scoped();
এটি স্কোপিং এর মাধ্যমে নির্দিষ্ট শর্ত যুক্ত করবে।
রিসোর্স ইউআরআই-গুলোর স্থানীয়করণ করতে পারেন। এটি ভাষার ভিত্তিতে রাউট তৈরি করতে সহায়তা করে।
কিছু সময়, আপনাকে রিসোর্স কন্ট্রোলারে অতিরিক্ত মেথড যুক্ত করতে হতে পারে। এটি করা যায় খুব সহজেই।
public function archive($id)
{
// Archive logic
}
সিঙ্গেলটন রিসোর্স কন্ট্রোলার হলো একটি রিসোর্সের জন্য একক উদাহরণ।
Route::singleton('settings', SettingsController::class);
Controllers-এ ডিপেনডেন্সি ইনজেকশন খুব সহজ। এটি আপনাকে কন্ট্রোলার মেথডে অন্যান্য ক্লাস বা সার্ভিস ইনজেক্ট করতে সহায়তা করে।
public function __construct(UserService $userService)
{
$this->userService = $userService;
}
লারাভেল কন্ট্রোলারগুলি অ্যাপ্লিকেশনের লজিকের কেন্দ্রীয় অংশ। এগুলি HTTP রিকোয়েস্ট পরিচালনা করে এবং ডাটা প্রক্রিয়াকরণ করে। কন্ট্রোলার ব্যবহার করে কোডের সংগঠন উন্নত হয় এবং রাউটের সাথে যুক্ত লজিককে পরিষ্কারভাবে আলাদা করা যায়। বিভিন্ন ধরনের কন্ট্রোলার যেমন রিসোর্স কন্ট্রোলার, সিঙ্গেলটন কন্ট্রোলার এবং ডিপেনডেন্সি ইনজেকশন ব্যবহার করে ডেভেলপাররা তাদের অ্যাপ্লিকেশনের কোডকে আরও কার্যকর ও সুরক্ষিত করতে পারেন।
Read more